import {
  createStore
} from 'vuex'

// export导入，导入需要加 {}
import { INCREMENT} from './mutation-types.js'

export default createStore({
  state: {
    count: 100,
    students: [{
        id: 110,
        name: 'why',
        age: 18
      },
      {
        id: 111,
        name: 'kobe',
        age: 24
      },
      {
        id: 112,
        name: 'james',
        age: 30
      },
      {
        id: 113,
        name: 'curry',
        age: 10
      }

    ]
  },
  // Vuex的store状态的更新唯一方式：提交Mutation
  mutations: {
    //方法
    //state默认传入
    // 我们可以使用 ES2015 风格的计算属性命名功能来使用一个常量作为函数名
    [INCREMENT](state) {
      state.count++
    },
    decrement(state) {
      state.count--
    },
    // mutations传递参数
    // 单个参数
    // incrementCount(state, count) {
    //   console.log(count);
    //   state.count += count
    // },
    // 特殊的提交封装
    incrementCount(state, payload) {
      // console.log(count);
      state.count += payload.count
    },
    // 参数是对象
    addStudent(state, stu) {
      state.students.push(stu)
    },
  },
  actions: {
    //Action类似于Mutation, 但是是用来代替Mutation进行异步操作的.
  },
  modules: {},
  getters: { // 可以认为是 store 的计算属性
    powerCounter(state) {
      return state.count * state.count
    },
    // 找出多于20岁的学生 
    // filter(回调函数(当前元素的值))
    more20stu(state) {
      return state.students.filter(s => s.age > 20)
    },
    // 找出大于20岁学生的个数
    more20stuLength(state, getters) { // Getters 也可以接受其他 getters 作为第二个参数：
      //  return state.students.filter(s => s.age > 20).length
      return getters.more20stu.length
    },
    // 找出年龄大于参数age的学生
    moreAgeStu(state) { // getters传递参数 只能让getters本身返回另一个函数.
      // return function (age) {
      //   return state.students.filter(s => s.age > age)
      // }
      return age => {
        return state.students.filter(s => s.age > age)
      }
    }

  }
})